home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / flamemarine.s < prev    next >
Text File  |  1997-01-31  |  15KB  |  932 lines

  1. ItsAFlameMarine:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  move.w #$4545,6(a0)
  11.  
  12.  move.b worry(a0),d0
  13.  move.b d0,d1
  14.  and.w #128,d1
  15.  and.b #127,d0
  16.  beq.s .noless
  17.  sub.b #1,d0
  18. .noless:
  19.  add.b d0,d1
  20.  move.b d1,worry(a0)
  21.  
  22.  move.w (a0),CollId
  23.  move.w #80,extlen
  24.  move.b #1,awayfromwall
  25.  
  26.  move.l #20*256,StepUpVal
  27.  move.l #20*256,StepDownVal
  28.  move.l #128*128,thingheight
  29.  move.l #4,deadframe
  30.  move.w #0,screamsound
  31.  move.w #64,nasheight
  32.  clr.b gotgun
  33.  move.w 12(a0),d2
  34.  bge.s .stillalive
  35. .notthisone:
  36.  move.w 12(a0),GraphicRoom(a0)
  37.  rts
  38. .stillalive:
  39.  
  40.  tst.b numlives(a0)
  41.  bgt .notdying
  42.  
  43.  move.w ThirdTimer(a0),d1
  44.  sub.w TempFrames,d1
  45.  bge.s .noneg
  46.  move.w #0,d1
  47. .noneg:
  48.  move.w d1,ThirdTimer(a0)
  49.  
  50.  move.w .dyinganim(pc,d1.w*2),10(a0)
  51.  
  52.  move.b #0,numlives(a0)
  53.  move.l ZoneAdds,a1
  54.  move.l (a1,d2.w*4),a1
  55.  add.l LEVELDATA,a1
  56.  
  57.  move.l ToZoneFloor(a1),d0
  58.  tst.b ObjInTop(a0)
  59.  beq.s .notintopp
  60.  move.l ToUpperFloor(a1),d0
  61. .notintopp:
  62.  asr.l #7,d0
  63.  sub.w #64,d0
  64.  move.w d0,4(a0)
  65.  
  66.  move.w 12(a0),GraphicRoom(a0)
  67.  rts
  68.  
  69. .dyinganim:
  70.  dcb.w 6,18
  71.  dcb.w 10,17
  72.  dcb.w 10,16
  73.  
  74.  
  75. .notdying: 
  76.  
  77.  tst.b 17(a0)
  78.  beq.s .cantseeplayer
  79.  tst.w ThirdTimer(a0)
  80.  ble FlameMarineAttack
  81.  move.w TempFrames,d0
  82.  sub.w d0,ThirdTimer(a0)
  83.  bra .waitandsee
  84.  
  85. .cantseeplayer:
  86.  
  87.  jsr GetRand
  88.  lsr.w #4,d0
  89.  and.w #63,d0
  90.  add.w #20,d0
  91.  move.w d0,ThirdTimer(a0)
  92.  
  93. .waitandsee:
  94.  
  95.  move.w #30,FourthTimer(a0)
  96.  
  97.  move.w 12(a0),d2
  98.  move.l ZoneAdds,a5
  99.  move.l (a5,d2.w*4),d0
  100.  add.l LEVELDATA,d0
  101.  move.l d0,objroom
  102.  
  103.  jsr ViewpointToDraw
  104.  
  105.  asl.l #2,d0
  106.  add.w alframe+2,d0
  107.  add.l #$00110000,d0
  108.  move.l d0,8(a0)
  109.  
  110.  move.w 4(a0),d0
  111.  sub.w #64,d0
  112.  ext.l d0
  113.  asl.l #7,d0
  114.  move.l d0,newy
  115.  move.l d0,oldy
  116.  
  117.  move.w 12(a0),FromZone
  118.  jsr CheckTeleport
  119.  tst.b OKTEL
  120.  beq.s .notel
  121.  move.l floortemp,d0
  122.  asr.l #7,d0
  123.  add.w d0,4(a0)
  124.  bra .nochangedir
  125. .notel:
  126.  
  127.  move.w maxspd(a0),d2
  128.  muls TempFrames,d2
  129.  move.w d2,speed
  130.  move.w Facing(a0),d0
  131.  move.b ObjInTop(a0),StoodInTop
  132.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  133.  jsr GoInDirection
  134.  move.w #%1000000000,wallflags
  135.  
  136.  move.l #%11111111110111100001,CollideFlags
  137.  jsr Collision
  138.  tst.b hitwall
  139.  beq.s .canmove
  140.  
  141.  move.w oldx,newx
  142.  move.w oldz,newz
  143.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  144.  bra .hitathing
  145.  
  146. .canmove:
  147.  
  148.  clr.b wallbounce
  149.  jsr MoveObject
  150.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  151.  move.b StoodInTop,ObjInTop(a0)
  152.  
  153. .hitathing:
  154.  
  155.  tst.b hitwall
  156.  beq.s .nochangedir
  157.  move.w #-1,ObjTimer(a0)
  158. .nochangedir
  159.  
  160.  move.l objroom,a2
  161.  move.w (a2),12(a0)
  162.  move.w newx,(a1)
  163.  move.w newz,4(a1)
  164.  
  165.  move.w (a2),d0
  166.  move.l #ZoneBrightTable,a5
  167.  move.l (a5,d0.w*4),d0
  168.  tst.b ObjInTop(a0)
  169.  bne.s .okbit
  170.  swap d0
  171. .okbit:
  172.  move.w d0,2(a0)
  173.  
  174.  move.l ToZoneFloor(a2),d0
  175.  tst.b ObjInTop(a0)
  176.  beq.s .notintop
  177.  move.l ToUpperFloor(a2),d0
  178. .notintop:
  179.  asr.l #7,d0
  180.  sub.w #64,d0
  181.  move.w d0,4(a0)
  182.  
  183.  moveq #0,d2
  184.  move.b damagetaken(a0),d2
  185.  beq .noscream
  186.  
  187.  sub.b d2,numlives(a0)
  188.  bgt .notdeadyet
  189.  
  190.  cmp.b #1,d2
  191.  ble .noexplode
  192.  
  193.  movem.l d0-d7/a0-a6,-(a7)
  194.  sub.l ObjectPoints,a1
  195.  add.l #ObjRotated,a1
  196.  move.l (a1),Noisex
  197.  move.w #400,Noisevol
  198.  move.w #14,Samplenum
  199.  move.b #1,chanpick
  200.  clr.b notifplaying
  201.  st backbeat
  202.  move.b 1(a0),IDNUM
  203.  jsr MakeSomeNoise
  204.  movem.l (a7)+,d0-d7/a0-a6
  205.  
  206.  movem.l d0-d7/a0-a6,-(a7)
  207.  move.w #0,d0
  208.  asr.w #2,d2
  209.  tst.w d2
  210.  bgt.s .ko
  211.  moveq #1,d2
  212. .ko:
  213.  move.w #31,d3
  214.  jsr ExplodeIntoBits
  215.  movem.l (a7)+,d0-d7/a0-a6
  216.  
  217.  cmp.b #40,d2
  218.  blt .noexplode
  219.  
  220.  move.w #-1,12(a0)
  221.  move.w 12(a0),GraphicRoom(a0)
  222.  rts
  223.  
  224. .noexplode:
  225.  
  226.  movem.l d0-d7/a0-a6,-(a7)
  227.  sub.l ObjectPoints,a1
  228.  add.l #ObjRotated,a1
  229.  move.l (a1),Noisex
  230.  move.w #200,Noisevol
  231.  move.w screamsound,Samplenum
  232.  move.b #1,chanpick
  233.  clr.b notifplaying
  234.  st backbeat
  235.  move.b 1(a0),IDNUM
  236.  jsr MakeSomeNoise
  237.  movem.l (a7)+,d0-d7/a0-a6
  238.  
  239.  move.w #25,ThirdTimer(a0)
  240.  
  241.  move.w 12(a0),GraphicRoom(a0)
  242.  rts
  243.  
  244. .notdeadyet:
  245.  clr.b damagetaken(a0)
  246.  movem.l d0-d7/a0-a6,-(a7)
  247.  sub.l ObjectPoints,a1
  248.  add.l #ObjRotated,a1
  249.  move.l (a1),Noisex
  250.  move.w #200,Noisevol
  251.  move.w screamsound,Samplenum
  252.  move.b #1,chanpick
  253.  clr.b notifplaying
  254.  move.b 1(a0),IDNUM
  255.  st backbeat
  256.  jsr MakeSomeNoise
  257.  movem.l (a7)+,d0-d7/a0-a6
  258.  
  259.  
  260. .noscream
  261.  
  262.  
  263.  move.w TempFrames,d0
  264.  sub.w d0,ObjTimer(a0)
  265.  bge.s .keepsamedir
  266.  
  267.  jsr GetRand
  268.  and.w #8190,d0
  269.  move.w d0,Facing(a0)
  270.  move.w #50,ObjTimer(a0)
  271.  
  272. .keepsamedir:
  273.  
  274.  move.w TempFrames,d0
  275.  sub.w d0,SecTimer(a0)
  276.  bge.s .nohiss
  277.  
  278.  jsr GetRand
  279.  lsr.w #6,d0
  280.  and.w #1,d0
  281.  add.w #17,d0
  282.  movem.l d0-d7/a0-a6,-(a7)
  283.  sub.l ObjectPoints,a1
  284.  add.l #ObjRotated,a1
  285.  move.l (a1),Noisex
  286.  move.w #100,Noisevol
  287.  move.w d0,Samplenum
  288.  move.b #1,chanpick
  289.  clr.b notifplaying
  290.  move.b 1(a0),IDNUM
  291.  st backbeat
  292.  jsr MakeSomeNoise
  293.  movem.l (a7)+,d0-d7/a0-a6
  294.  
  295.  Jsr GetRand
  296.  lsr.w #6,d0
  297.  and.w #255,d0
  298.  add.w #300,d0
  299.  move.w d0,SecTimer(a0)
  300.  
  301. .nohiss:
  302.  
  303.  move.b ObjInTop(a0),ViewerTop
  304.  move.b PLR1_StoodInTop,TargetTop
  305.  move.l PLR1_Roompt,ToRoom
  306.  move.l objroom,FromRoom
  307.  move.w newx,Viewerx
  308.  move.w newz,Viewerz
  309.  move.w PLR1_xoff,Targetx
  310.  move.w PLR1_zoff,Targetz
  311.  move.l PLR1_yoff,d0
  312.  asr.l #7,d0
  313.  move.w d0,Targety
  314.  move.w 4(a0),Viewery
  315.  jsr CanItBeSeen
  316.  
  317.  clr.b 17(a0)
  318.  
  319.  tst.b CanSee
  320.  beq .carryonprowling
  321.  
  322.  move.b #1,17(a0)
  323.  
  324. .carryonprowling:
  325.  
  326.  move.b ObjInTop(a0),ViewerTop
  327.  move.b PLR2_StoodInTop,TargetTop
  328.  move.l PLR2_Roompt,ToRoom
  329.  move.l objroom,FromRoom
  330.  move.w newx,Viewerx
  331.  move.w newz,Viewerz
  332.  move.w PLR2_xoff,Targetx
  333.  move.w PLR2_zoff,Targetz
  334.  move.l PLR2_yoff,d0
  335.  asr.l #7,d0
  336.  move.w d0,Targety
  337.  move.w 4(a0),Viewery
  338.  jsr CanItBeSeen
  339.  
  340.  tst.b CanSee
  341.  beq .carryonprowling2
  342.  
  343.  or.b #2,17(a0)
  344.  
  345. .carryonprowling2:
  346.  
  347.  
  348.  move.w 12(a0),GraphicRoom(a0)
  349.  rts
  350.  
  351. FlameMarineAttack:
  352.  
  353.  move.w 12(a0),d2
  354.  move.l ZoneAdds,a5
  355.  move.l (a5,d2.w*4),d0
  356.  add.l LEVELDATA,d0
  357.  move.l d0,objroom
  358.  jsr ViewpointToDraw
  359.  asl.l #2,d0
  360.  add.w alframe+2,d0
  361.  add.l #$00110000,d0
  362.  move.l d0,8(a0)
  363.  
  364.  btst #0,17(a0)
  365.  beq FlameMarineAttackPLR2
  366.  btst #1,17(a0)
  367.  beq FlameMarineAttackPLR1
  368.  
  369.  move.l ObjectPoints,a1
  370.  move.w (a0),d0
  371.  move.w (a1,d0.w*8),d1
  372.  move.w 4(a1,d0.w*8),d2
  373.  
  374.  move.w PLR1_xoff,d3
  375.  move.w PLR1_zoff,d4
  376.  sub.w d1,d3
  377.  sub.w d2,d4
  378.  muls d3,d3
  379.  muls d4,d4
  380.  add.l d4,d3
  381.  move.w PLR2_xoff,d4
  382.  move.w PLR2_zoff,d5
  383.  sub.w d1,d4
  384.  sub.w d2,d5
  385.  muls d4,d4
  386.  muls d5,d5
  387.  add.l d5,d4
  388.  cmp.l d3,d4
  389.  ble FlameMarineAttackPLR2
  390.  
  391.  
  392. FlameMarineAttackPLR1:
  393.  
  394.  
  395.  move.w TempFrames,d0
  396.  sub.w d0,FourthTimer(a0)
  397.  bgt.s .oktoshoot
  398.  move.w #50,ThirdTimer(a0)
  399. .oktoshoot:
  400.  
  401.  move.w 12(a0),d2
  402.  move.l ZoneAdds,a5
  403.  move.l (a5,d2.w*4),d0
  404.  add.l LEVELDATA,d0
  405.  move.l d0,objroom
  406.  
  407.  jsr ViewpointToDraw
  408.  
  409.  asl.l #2,d0
  410.  add.l #$110000,d0
  411.  move.l d0,8(a0)
  412.  
  413.  move.w PLR1_xoff,newx
  414.  move.w PLR1_zoff,newz
  415.  move.w (a0),d1
  416.  move.l #ObjRotated,a6
  417.  move.l ObjectPoints,a1
  418.  lea (a1,d1.w*8),a1
  419.  lea (a6,d1.w*8),a6
  420.  move.w (a1),oldx
  421.  move.w 4(a1),oldz
  422.  move.w maxspd(a0),d2
  423.  muls.w TempFrames,d2
  424.  move.w d2,speed
  425.  move.w #80,Range
  426.  move.w 4(a0),d0
  427.  ext.l d0
  428.  asl.l #7,d0
  429.  sub.l #64*128,d0
  430.  move.l d0,newy
  431.  move.l d0,oldy
  432.  
  433.  move.b ObjInTop(a0),StoodInTop
  434.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  435.  clr.b canshove
  436.  clr.b GotThere
  437.  jsr HeadTowardsAng
  438.  move.w #%1000000000,wallflags
  439.  
  440.   
  441.  clr.b wallbounce
  442.  Jsr MoveObject
  443.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  444.  move.b StoodInTop,ObjInTop(a0)
  445.  
  446.  move.w AngRet,Facing(a0)
  447.  
  448.  move.l objroom,a2
  449.  move.w (a2),12(a0)
  450.  move.w oldx,(a1)
  451.  move.w oldz,4(a1)
  452.  
  453.  move.w (a2),d0
  454.  move.l #ZoneBrightTable,a5
  455.  move.l (a5,d0.w*4),d0
  456.  tst.b ObjInTop(a0)
  457.  bne.s .okbit
  458.  swap d0
  459. .okbit:
  460.  move.w d0,2(a0)
  461.  
  462.  move.l ToZoneFloor(a2),d0
  463.  tst.b ObjInTop(a0)
  464.  beq.s .notintop
  465.  move.l ToUpperFloor(a2),d0
  466. .notintop:
  467.  asr.l #7,d0
  468.  sub.w #64,d0
  469.  move.w d0,4(a0)
  470.  
  471.  
  472.  moveq #0,d2
  473.  move.b damagetaken(a0),d2
  474.  beq .noscream
  475.  
  476.  sub.b d2,numlives(a0)
  477.  bgt .notdeadyet
  478.  
  479.  cmp.b #1,d2
  480.  ble .noexplode
  481.  
  482.  movem.l d0-d7/a0-a6,-(a7)
  483.  sub.l ObjectPoints,a1
  484.  add.l #ObjRotated,a1
  485.  move.l (a1),Noisex
  486.  move.w #400,Noisevol
  487.  move.w #14,Samplenum
  488.  move.b #1,chanpick
  489.  clr.b notifplaying
  490.  st backbeat
  491.  move.b 1(a0),IDNUM
  492.  jsr MakeSomeNoise
  493.  movem.l (a7)+,d0-d7/a0-a6
  494.  
  495.  movem.l d0-d7/a0-a6,-(a7)
  496.  move.w #0,d0
  497.  asr.w #2,d2
  498.  tst.w d2
  499.  bgt.s .ko
  500.  moveq #1,d2
  501. .ko:
  502.  move.w #31,d3
  503.  jsr ExplodeIntoBits
  504.  movem.l (a7)+,d0-d7/a0-a6
  505.  
  506.  cmp.b #40,d2
  507.  blt .noexplode
  508.  
  509.  move.w #-1,12(a0)
  510.  move.w 12(a0),GraphicRoom(a0)
  511.  rts
  512.  
  513. .noexplode:
  514.  
  515.  movem.l d0-d7/a0-a6,-(a7)
  516.  sub.l ObjectPoints,a1
  517.  add.l #ObjRotated,a1
  518.  move.l (a1),Noisex
  519.  move.w #200,Noisevol
  520.  move.w screamsound,Samplenum
  521.  move.b #1,chanpick
  522.  clr.b notifplaying
  523.  st backbeat
  524.  move.b 1(a0),IDNUM
  525.  jsr MakeSomeNoise
  526.  movem.l (a7)+,d0-d7/a0-a6
  527.  
  528.  move.w #25,ThirdTimer(a0)
  529.  
  530.  move.w 12(a0),GraphicRoom(a0)
  531.  rts
  532.  
  533. .notdeadyet:
  534.  clr.b damagetaken(a0)
  535.  movem.l d0-d7/a0-a6,-(a7)
  536.  sub.l ObjectPoints,a1
  537.  add.l #ObjRotated,a1
  538.  move.l (a1),Noisex
  539.  move.w #200,Noisevol
  540.  move.w screamsound,Samplenum
  541.  move.b #1,chanpick
  542.  clr.b notifplaying
  543.  move.b 1(a0),IDNUM
  544.  st backbeat
  545.  jsr MakeSomeNoise
  546.  movem.l (a7)+,d0-d7/a0-a6
  547.  
  548.  
  549. .noscream
  550.  
  551.  
  552. ; tst.b canshootgun
  553. ; beq .cantshoot
  554.  cmp.w #20,FourthTimer(a0)
  555.  bge .cantshoot
  556.  
  557.  jsr GetRand
  558.  and.w #255,d0
  559.  add.w #200,d0
  560.  move.w d0,ThirdTimer(a0)
  561.  
  562.  move.l (a6),Noisex
  563.  move.w #200,Noisevol
  564.  move.w #21,Samplenum
  565.  move.b #1,chanpick
  566.  clr.b notifplaying
  567.  movem.l a5/a1/a0,-(a7)
  568.  move.b 1(a0),IDNUM
  569.  jsr MakeSomeNoise
  570.  movem.l (a7)+,a5/a1/a0
  571.  
  572.  move.w #-100,2(a0)
  573.  
  574.  moveq #4,d7
  575.  
  576. .shotlop:
  577.  
  578.  movem.l a0/a1/d7,-(a7)
  579.  jsr GetRand
  580.  
  581.  move.l #ObjRotated,a6
  582.  move.w (a0),d1
  583.  lea (a6,d1.w*8),a6
  584.  
  585.  and.w #$7fff,d0
  586.  move.w (a6),d1
  587.  muls d1,d1
  588.  move.w 2(a6),d2
  589.  muls d2,d2
  590.  add.l d2,d1
  591.  asr.l #6,d1
  592.  ext.l d0
  593.  asl.l #2,d0
  594.  cmp.l d1,d0
  595.  bgt.s .hitplr
  596.  jsr SHOOTPLAYER1
  597.  bra.s .missplr
  598. .hitplr: 
  599.  move.l PLR1_Obj,a1
  600.  add.b #2,damagetaken(a1)
  601. .missplr:
  602.  movem.l (a7)+,a0/a1/d7
  603.  
  604.  dbra d7,.shotlop
  605.  
  606. .cantshoot:
  607.  
  608.  move.w TempFrames,d0
  609.  sub.w d0,SecTimer(a0)
  610.  bge.s .nohiss
  611.  
  612.  movem.l d0-d7/a0-a6,-(a7)
  613.  sub.l ObjectPoints,a1
  614.  add.l #ObjRotated,a1
  615.  move.l (a1),Noisex
  616.  move.w #100,Noisevol
  617.  move.w #16,Samplenum
  618.  move.b #1,chanpick
  619.  clr.b notifplaying
  620.  move.b 1(a0),IDNUM
  621.  st backbeat
  622.  jsr MakeSomeNoise
  623.  movem.l (a7)+,d0-d7/a0-a6
  624.  
  625.  Jsr GetRand
  626.  lsr.w #6,d0
  627.  and.w #255,d0
  628.  add.w #300,d0
  629.  move.w d0,SecTimer(a0)
  630.  
  631. .nohiss:
  632.  
  633.  move.b ObjInTop(a0),ViewerTop
  634.  move.b PLR1_StoodInTop,TargetTop
  635.  move.l PLR1_Roompt,ToRoom
  636.  move.l objroom,FromRoom
  637.  move.w newx,Viewerx
  638.  move.w newz,Viewerz
  639.  move.w PLR1_xoff,Targetx
  640.  move.w PLR1_zoff,Targetz
  641.  move.l PLR1_yoff,d0
  642.  asr.l #7,d0
  643.  move.w d0,Targety
  644.  move.w 4(a0),Viewery
  645.  jsr CanItBeSeen
  646.  
  647.  clr.b 17(a0)
  648.  tst.b CanSee
  649.  beq .carryonprowling
  650.  
  651.  move.b #1,17(a0)
  652.  
  653. .carryonprowling:
  654.  
  655.  cmp.b #'n',mors
  656.  beq.s .carryonprowling2
  657.  
  658.  
  659.  move.b ObjInTop(a0),ViewerTop
  660.  move.b PLR2_StoodInTop,TargetTop
  661.  move.l PLR2_Roompt,ToRoom
  662.  move.l objroom,FromRoom
  663.  move.w newx,Viewerx
  664.  move.w newz,Viewerz
  665.  move.w PLR2_xoff,Targetx
  666.  move.w PLR2_zoff,Targetz
  667.  move.l PLR2_yoff,d0
  668.  asr.l #7,d0
  669.  move.w d0,Targety
  670.  move.w 4(a0),Viewery
  671.  jsr CanItBeSeen
  672.  
  673.  tst.b CanSee
  674.  beq .carryonprowling2
  675.  
  676.  or.b #2,17(a0)
  677.  
  678. .carryonprowling2:
  679.  
  680.  
  681.  move.w 12(a0),GraphicRoom(a0)
  682.  rts
  683.  
  684. *************************************************
  685.  
  686. FlameMarineAttackPLR2:
  687.  
  688.  
  689.  
  690.  move.w TempFrames,d0
  691.  sub.w d0,FourthTimer(a0)
  692.  bgt.s .oktoshoot
  693.  move.w #50,ThirdTimer(a0)
  694. .oktoshoot:
  695.  
  696.  move.w 12(a0),d2
  697.  move.l ZoneAdds,a5
  698.  move.l (a5,d2.w*4),d0
  699.  add.l LEVELDATA,d0
  700.  move.l d0,objroom
  701.  
  702.  jsr ViewpointToDraw
  703.  
  704.  asl.l #2,d0
  705.  add.l #$110000,d0
  706.  move.l d0,8(a0)
  707.  
  708.  move.w PLR2_xoff,newx
  709.  move.w PLR2_zoff,newz
  710.  move.w (a0),d1
  711.  move.l #ObjRotated,a6
  712.  move.l ObjectPoints,a1
  713.  lea (a1,d1.w*8),a1
  714.  lea (a6,d1.w*8),a6
  715.  move.w (a1),oldx
  716.  move.w 4(a1),oldz
  717.  move.w maxspd(a0),d2
  718.  muls.w TempFrames,d2
  719.  move.w d2,speed
  720.  move.w #80,Range
  721.  move.w 4(a0),d0
  722.  ext.l d0
  723.  asl.l #7,d0
  724.  sub.l #64*128,d0
  725.  move.l d0,newy
  726.  move.l d0,oldy
  727.  
  728.  move.b ObjInTop(a0),StoodInTop
  729.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  730.  clr.b canshove
  731.  clr.b GotThere
  732.  jsr HeadTowardsAng
  733.  move.w #%1000000000,wallflags
  734.  
  735.   
  736.  clr.b wallbounce
  737.  Jsr MoveObject
  738.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  739.  move.b StoodInTop,ObjInTop(a0)
  740.  
  741.  move.w AngRet,Facing(a0)
  742.  
  743.  move.l objroom,a2
  744.  move.w (a2),12(a0)
  745.  move.w oldx,(a1)
  746.  move.w oldz,4(a1)
  747.  
  748.  move.w (a2),d0
  749.  move.l #ZoneBrightTable,a5
  750.  move.l (a5,d0.w*4),d0
  751.  tst.b ObjInTop(a0)
  752.  bne.s .okbit
  753.  swap d0
  754. .okbit:
  755.  move.w d0,2(a0)
  756.  
  757.  move.l ToZoneFloor(a2),d0
  758.  tst.b ObjInTop(a0)
  759.  beq.s .notintop
  760.  move.l ToUpperFloor(a2),d0
  761. .notintop:
  762.  asr.l #7,d0
  763.  sub.w #64,d0
  764.  move.w d0,4(a0)
  765.  
  766.  move.b damagetaken(a0),d2
  767.  beq .noscream
  768.  
  769.  sub.b d2,numlives(a0)
  770.  bgt .notdeadyet
  771.  
  772. ; cmp.b #1,d2
  773. ; ble.s .noexplode
  774.  
  775.  movem.l d0-d7/a0-a6,-(a7)
  776.  sub.l ObjectPoints,a1
  777.  add.l #ObjRotated,a1
  778.  move.l (a1),Noisex
  779.  move.w #400,Noisevol
  780.  move.w #14,Samplenum
  781.  move.b #1,chanpick
  782.  clr.b notifplaying
  783.  st backbeat
  784.  move.b 1(a0),IDNUM
  785.  jsr MakeSomeNoise
  786.  movem.l (a7)+,d0-d7/a0-a6
  787.  
  788.  movem.l d0-d7/a0-a6,-(a7)
  789.  move.w #0,d0
  790.  move.w #9,d2
  791.  move.w #31,d3
  792.  jsr ExplodeIntoBits
  793.  movem.l (a7)+,d0-d7/a0-a6
  794.  move.w #-1,12(a0)
  795.  move.w 12(a0),GraphicRoom(a0)
  796.  rts
  797.  
  798. .noexplode:
  799.  
  800.  movem.l d0-d7/a0-a6,-(a7)
  801.  sub.l ObjectPoints,a1
  802.  add.l #ObjRotated,a1
  803.  move.l (a1),Noisex
  804.  move.w #200,Noisevol
  805.  move.w screamsound,Samplenum
  806.  move.b #1,chanpick
  807.  clr.b notifplaying
  808.  st backbeat
  809.  move.b 1(a0),IDNUM
  810.  jsr MakeSomeNoise
  811.  movem.l (a7)+,d0-d7/a0-a6
  812.  move.l deadframe,8(a0)
  813.  move.w 12(a0),GraphicRoom(a0)
  814.  rts
  815.  
  816. .notdeadyet:
  817.  clr.b damagetaken(a0)
  818.  movem.l d0-d7/a0-a6,-(a7)
  819.  sub.l ObjectPoints,a1
  820.  add.l #ObjRotated,a1
  821.  move.l (a1),Noisex
  822.  move.w #200,Noisevol
  823.  move.w screamsound,Samplenum
  824.  move.b #1,chanpick
  825.  clr.b notifplaying
  826.  move.b 1(a0),IDNUM
  827.  st backbeat
  828.  jsr MakeSomeNoise
  829.  movem.l (a7)+,d0-d7/a0-a6
  830.  
  831. .noscream
  832.  
  833. ; tst.b canshootgun
  834. ; beq .cantshoot
  835.  cmp.w #20,FourthTimer(a0)
  836.  bge .cantshoot
  837.  
  838.  cmp.w #20,FourthTimer(a0)
  839.  bge .cantshoot
  840.  
  841.  move.w #25,FourthTimer(a0)
  842.  
  843.  move.w #1,Samplenum
  844.  move.b #3,SHOTTYPE
  845.  move.b #7,SHOTPOWER
  846.  move.w #8,SHOTSPEED
  847.  move.w #2,SHOTSHIFT
  848.  move.w #0,SHOTOFFMULT
  849.  move.w #-10,2(a0)
  850.  move.l #0,SHOTYOFF
  851.  jsr FireAtPlayer1
  852.  
  853. .cantshoot:
  854.  
  855.  move.w TempFrames,d0
  856.  sub.w d0,SecTimer(a0)
  857.  bge.s .nohiss
  858.  
  859.  movem.l d0-d7/a0-a6,-(a7)
  860.  sub.l ObjectPoints,a1
  861.  add.l #ObjRotated,a1
  862.  move.l (a1),Noisex
  863.  move.w #100,Noisevol
  864.  move.w #16,Samplenum
  865.  move.b #1,chanpick
  866.  clr.b notifplaying
  867.  move.b 1(a0),IDNUM
  868.  st backbeat
  869.  jsr MakeSomeNoise
  870.  movem.l (a7)+,d0-d7/a0-a6
  871.  
  872.  Jsr GetRand
  873.  lsr.w #6,d0
  874.  and.w #255,d0
  875.  add.w #300,d0
  876.  move.w d0,SecTimer(a0)
  877.  
  878. .nohiss:
  879.  
  880.  move.b ObjInTop(a0),ViewerTop
  881.  move.b PLR1_StoodInTop,TargetTop
  882.  move.l PLR1_Roompt,ToRoom
  883.  move.l objroom,FromRoom
  884.  move.w newx,Viewerx
  885.  move.w newz,Viewerz
  886.  move.w PLR1_xoff,Targetx
  887.  move.w PLR1_zoff,Targetz
  888.  move.l PLR1_yoff,d0
  889.  asr.l #7,d0
  890.  move.w d0,Targety
  891.  move.w 4(a0),Viewery
  892.  jsr CanItBeSeen
  893.  
  894.  clr.b 17(a0)
  895.  tst.b CanSee
  896.  beq .carryonprowling
  897.  
  898.  move.b #1,17(a0)
  899.  
  900. .carryonprowling:
  901.  
  902.  cmp.b #'n',mors
  903.  beq.s .carryonprowling2
  904.  
  905.  
  906.  move.b ObjInTop(a0),ViewerTop
  907.  move.b PLR2_StoodInTop,TargetTop
  908.  move.l PLR2_Roompt,ToRoom
  909.  move.l objroom,FromRoom
  910.  move.w newx,Viewerx
  911.  move.w newz,Viewerz
  912.  move.w PLR2_xoff,Targetx
  913.  move.w PLR2_zoff,Targetz
  914.  move.l PLR2_yoff,d0
  915.  asr.l #7,d0
  916.  move.w d0,Targety
  917.  move.w 4(a0),Viewery
  918.  jsr CanItBeSeen
  919.  
  920.  tst.b CanSee
  921.  beq .carryonprowling2
  922.  
  923.  or.b #2,17(a0)
  924.  
  925. .carryonprowling2:
  926.  
  927.  
  928.  move.w 12(a0),GraphicRoom(a0)
  929.  rts
  930.  
  931.  
  932.